package Day019_Junit单元测试_NIO.demo3_Buffer类_缓冲区;

import java.nio.ByteBuffer;

/**
 * @author zhangyan
 * @date 2020/5/12 11:36
 */
/*
    public Buffer flip()：缩小limit的范围。
             将limit设置为当前position位置；
             将当前position位置设置为0；
             丢弃标记
 */

public class Test9_flip {
    public static void main(String[] args) {
        //创建ByteBuffer缓冲数组 容量为10
        ByteBuffer bb = ByteBuffer.allocate(10);

        //添加元素
        bb.put((byte) 1);
        bb.put((byte) 2);
        bb.put((byte) 3);

        //设置限制位置
        bb.limit(6);

        System.out.println("容量:" + bb.capacity() + " 限制:" + bb.limit() + " 位置:" + bb.position());
        //容量:10 限制:6 位置:3

        // flip 切换  (本质:从写切换到读)
        bb.flip();
        System.out.println("容量:" + bb.capacity() + " 限制:" + bb.limit() + " 位置:" + bb.position());
        //容量:10 限制:3 位置:0

       /*
       结论:
            读写操作是 操作position--limit之间的数据
            写完去读,调用flip方法
            读完去写,调用clear方法
            如果不调用flip方法,就去读取缓冲数组的数据,那么读取到的是3-6之间的索引元素
            如果调用flip方法后,读取缓冲数组的数据,那么读取到的是0-3之间的索引元素
        */
    }
}
